module SSJ

# dependencies 
import NLsolve
using OrderedCollections, LinearAlgebra, NLsolve, Roots

# exported functions
export simple, het, solved, combine, create_model, apply_function, add_hetinputs, add_hetoutputs, SteadyStateDict, ImpulseDict, JacobianDict, solve_steady_state, steady_state, solve_jacobian, jacobian, apply, agrid, interpolate_y, markov_rouwenhorst, apply_coord, addouter, interpolate_coord, solve_impulse_nonlinear, setmin

# /utilities
include("../src/utilities/function.jl") 
include("../src/utilities/bijection.jl") 
include("../src/utilities/graph.jl")
include("../src/utilities/optimized_routines.jl")
include("../src/utilities/misc.jl")

# /src
include("../src/interpolate.jl")

# /classes
include("../src/classes/sparse_jacobians.jl")
include("../src/classes/result_dict.jl")
include("../src/classes/steady_state_dict.jl")
include("../src/classes/impulse_dict.jl")
include("../src/classes/jacobian_dict.jl")

# /blocks
include("../src/blocks/support/simple_displacement.jl")
include("../src/blocks/support/steady_state.jl")
include("../src/blocks/support/het_compiled.jl")
include("../src/blocks/support/het_support.jl")
include("../src/blocks/block.jl")
include("../src/blocks/auxiliary_blocks/jacobiandict_block.jl")
include("../src/blocks/parent_block.jl")
include("../src/blocks/simple_block.jl")
include("../src/blocks/combined_block.jl")
include("../src/blocks/het_block.jl")
include("../src/blocks/solved_block.jl")

end
